From 4b4cd536570802abca4836ee05aff2155bba243e Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Thu, 25 Jan 2007 13:05:15 +0000 Subject: [PATCH] 32-on-64: Small fixes. Signed-off-by: Jan Beulich --- xen/arch/x86/traps.c | 7 +++++-- xen/arch/x86/x86_64/compat/entry.S | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 1525882b8e..16b1e48ca8 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1146,7 +1146,9 @@ static int emulate_privileged_op(struct cpu_user_regs *regs) goto fail; op_default = op_bytes = (ar & (_SEGMENT_L|_SEGMENT_DB)) ? 4 : 2; ad_default = ad_bytes = (ar & _SEGMENT_L) ? 8 : op_default; - if ( !(ar & (_SEGMENT_CODE|_SEGMENT_S|_SEGMENT_P)) ) + if ( !(ar & _SEGMENT_S) || + !(ar & _SEGMENT_P) || + !(ar & _SEGMENT_CODE) ) goto fail; /* emulating only opcodes not allowing SS to be default */ @@ -1234,7 +1236,8 @@ static int emulate_privileged_op(struct cpu_user_regs *regs) &data_base, &data_limit, &ar, _SEGMENT_WR|_SEGMENT_S|_SEGMENT_DPL|_SEGMENT_P) ) goto fail; - if ( !(ar & (_SEGMENT_S|_SEGMENT_P)) || + if ( !(ar & _SEGMENT_S) || + !(ar & _SEGMENT_P) || (opcode & 2 ? (ar & _SEGMENT_CODE) && !(ar & _SEGMENT_WR) : (ar & _SEGMENT_CODE) || !(ar & _SEGMENT_WR)) ) diff --git a/xen/arch/x86/x86_64/compat/entry.S b/xen/arch/x86/x86_64/compat/entry.S index 725b25a19e..8e8285b8f5 100644 --- a/xen/arch/x86/x86_64/compat/entry.S +++ b/xen/arch/x86/x86_64/compat/entry.S @@ -24,7 +24,9 @@ ENTRY(compat_hypercall) movq %rsp,%rdi movl $0xDEADBEEF,%eax rep stosq - popq %r9 ; popq %r8 ; popq %rcx; popq %rdx; popq %rsi; popq %rdi + popq %r8 ; popq %r9 ; xchgl %r8d,%r9d /* Args 5&6: zero extend */ + popq %rdx; popq %rcx; xchgl %edx,%ecx /* Args 3&4: zero extend */ + popq %rdi; popq %rsi; xchgl %edi,%esi /* Args 1&2: zero extend */ movl UREGS_rax(%rsp),%eax pushq %rax pushq UREGS_rip+8(%rsp) -- 2.30.2